package com.gobang.common.exception;

/**
 * 认证授权模块异常类
 * 处理认证和授权相关的业务异常
 * 
 * @author System
 * @since 1.0.0
 */
public class AuthException extends BaseException {

    /**
     * 构造函数 - 使用ErrorCode枚举
     *
     * @param errorCode 错误码枚举
     */
    public AuthException(ErrorCode errorCode) {
        super(errorCode);
    }

    /**
     * 构造函数 - 使用ErrorCode枚举和自定义消息
     *
     * @param errorCode 错误码枚举
     * @param customMessage 自定义错误消息
     */
    public AuthException(ErrorCode errorCode, String customMessage) {
        super(errorCode, customMessage);
    }

    /**
     * 构造函数 - 包含原因异常
     *
     * @param errorCode 错误码枚举
     * @param cause 原因异常
     */
    public AuthException(ErrorCode errorCode, Throwable cause) {
        super(errorCode, cause);
    }

    // 便捷方法
    public static AuthException loginFailed() {
        return new AuthException(ErrorCode.LOGIN_FAILED);
    }

    public static AuthException usernameOrPasswordError() {
        return new AuthException(ErrorCode.USERNAME_OR_PASSWORD_ERROR);
    }

    public static AuthException userNotLogin() {
        return new AuthException(ErrorCode.USER_NOT_LOGIN);
    }

    public static AuthException loginExpired() {
        return new AuthException(ErrorCode.LOGIN_EXPIRED);
    }

    public static AuthException tokenInvalid() {
        return new AuthException(ErrorCode.TOKEN_INVALID);
    }

    public static AuthException tokenExpired() {
        return new AuthException(ErrorCode.TOKEN_EXPIRED);
    }

    public static AuthException permissionDenied() {
        return new AuthException(ErrorCode.PERMISSION_DENIED);
    }

    public static AuthException accountLocked() {
        return new AuthException(ErrorCode.ACCOUNT_LOCKED);
    }

    public static AuthException passwordEncryptError() {
        return new AuthException(ErrorCode.PASSWORD_ENCRYPT_ERROR);
    }

    public static AuthException sessionCreateFailed() {
        return new AuthException(ErrorCode.SESSION_CREATE_FAILED);
    }
} 